package persistentie;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import domein.Auto;
import domein.Klant;
import domein.Gebruiker;

public class PersistentieController {
/*Attributen*/
	private final static String SELECTEER_MEDEWERKERS="SELECT gebruikers.* FROM gebruikers";
	private final static String SELECTEER_AUTOS="SELECT autos.* FROM autos";
	private final static String SELECTEER_KLANTEN="SELECT klanten.* FROM klanten";
	
	private static PersistentieController databaseController;
	
/*Constructor*/
	public static PersistentieController getInstance()
	{
		if(databaseController == null)
			databaseController = new PersistentieController();
		return databaseController;
	}
	private PersistentieController()
	{
	}

/*Methodes*/
	public void voegKlantToe(String klantVoornaam, String klantAchternaam, String adres,int postcode, String plaats,boolean geslacht, int geboortedatum, String rijbewijs)
	{
		Connection verbinding = Connectie.getInstance().getVerbinding();
		Statement statement;
		
		try 
		{
			statement = verbinding.createStatement();
			statement.executeQuery("INSERT INTO klanten (klantVoornaam,klantAchternaam,adres,postcode,plaats,geslacht,geboortedatum,rijbewijs) VALUES('klantVoornaam','klantAchternaam','adres','postcode','plaats','geslacht','geboortedatum','rijbewijs')");
			statement.close();
		}
		catch (SQLException e) {
			e.printStackTrace();
		}	
	}
	public List<Gebruiker> getGebruikersLijst()
	{
		List<Gebruiker> gebruikersLijst = new ArrayList<Gebruiker>();
		Connection verbinding = Connectie.getInstance().getVerbinding();
		Statement statement;
		
		try 
		{
			statement = verbinding.createStatement();
			
			ResultSet resultaat = statement.executeQuery(SELECTEER_MEDEWERKERS);
			while (resultaat.next()) 
			{
				String gebruikersNaam = resultaat.getString("gebruikersNaam");
				String gebruikersPaswoord = resultaat.getString("gebruikersPaswoord");
				String bestelplaats = resultaat.getString("bestelplaats");
				int taal = resultaat.getInt("taal");
				boolean rechten = resultaat.getBoolean("rechten");
				
				Gebruiker gebruiker = new Gebruiker(gebruikersNaam,gebruikersPaswoord,bestelplaats,taal,rechten);
				gebruikersLijst.add(gebruiker);
			}
			statement.close();
			return gebruikersLijst;
		} 
		catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	public List<Auto> getAutoLijst()
	{
		List<Auto> autoLijst = new ArrayList<Auto>();
		Connection verbinding = Connectie.getInstance().getVerbinding();
		Statement statement;
		
		try 
		{
			statement = verbinding.createStatement();
			
			ResultSet resultaat = statement.executeQuery(SELECTEER_AUTOS); 
			while (resultaat.next()) 
			{
				String autoCategorie = resultaat.getString("autoCategorie");
				String autoMerk = resultaat.getString("autoMerk");
				String autoType = resultaat.getString("autoType");
				String bestelplaats = resultaat.getString("bestelplaats");
				int bouwjaar = resultaat.getInt("bouwjaar");
				double kmstand = resultaat.getDouble("kmstand");
				String kenteken = resultaat.getString("kenteken");
				String chassisnummer = resultaat.getString("chassisnummer");		//17 digits
				boolean transmissie = resultaat.getBoolean("transmissie");
				String brandstof = resultaat.getString("brandstof");
				int aantalDeuren = resultaat.getInt("aantalDeuren");
				int airco = resultaat.getInt("airco");
				int aantalZitplaatsen = resultaat.getInt("aantalZitplaatsen");
				int aantalStuksBagage = resultaat.getInt("aantalStuksBagage");
				double dagprijs = resultaat.getDouble("dagprijs");	
				String waarborgcodetemp = resultaat.getString("waarborgcode");
				char waarborgcode = waarborgcodetemp.charAt(0);
				double verbruik = resultaat.getDouble("verbruik");
				
				Auto auto = new Auto(autoCategorie,autoMerk,autoType,bestelplaats,bouwjaar,kmstand,kenteken,chassisnummer,transmissie,brandstof,aantalDeuren,airco,aantalZitplaatsen,aantalStuksBagage,dagprijs,waarborgcode,verbruik);
				
				autoLijst.add(auto);
			}
			statement.close();
			return autoLijst;
		} 
		catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	public List<Auto> getAutoLijst(String periode)
	{
		List<Auto> autoLijst = new ArrayList<Auto>();
		Connection verbinding = Connectie.getInstance().getVerbinding();
		Statement statement;
		
		try 
		{
			statement = verbinding.createStatement();
			
			ResultSet resultaat = statement.executeQuery(SELECTEER_AUTOS);
			while (resultaat.next()) 
			{
				String autoCategorie = resultaat.getString("autoCategorie");
				String autoMerk = resultaat.getString("autoMerk");
				String autoType = resultaat.getString("autoType");
				String bestelplaats = resultaat.getString("bestelplaats");
				int bouwjaar = resultaat.getInt("bouwjaar");
				double kmstand = resultaat.getDouble("kmstand");
				String kenteken = resultaat.getString("kenteken");
				String chassisnummer = resultaat.getString("chassisnummer");		//17 digits
				boolean transmissie = resultaat.getBoolean("transmissie");
				String brandstof = resultaat.getString("brandstof");
				int aantalDeuren = resultaat.getInt("aantalDeuren");
				int airco = resultaat.getInt("airco");
				int aantalZitplaatsen = resultaat.getInt("aantalZitplaatsen");
				int aantalStuksBagage = resultaat.getInt("aantalStuksBagage");
				double dagprijs = resultaat.getDouble("dagprijs");	
				String waarborgcodetemp = resultaat.getString("waarborgcode");
				char waarborgcode = waarborgcodetemp.charAt(0);
				double verbruik = resultaat.getDouble("verbruik");
				
				Auto auto = new Auto(autoCategorie,autoMerk,autoType,bestelplaats,bouwjaar,kmstand,kenteken,chassisnummer,transmissie,brandstof,aantalDeuren,airco,aantalZitplaatsen,aantalStuksBagage,dagprijs,waarborgcode,verbruik);
				
				autoLijst.add(auto);
			}
			statement.close();
			return autoLijst;
		} 
		catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	public List<Klant> getKlantenLijst()
	{
		List<Klant> klantenLijst = new ArrayList<Klant>();
		Connection verbinding = Connectie.getInstance().getVerbinding();
		Statement statement;
		
		try 
		{
			statement = verbinding.createStatement();
			
			ResultSet resultaat = statement.executeQuery(SELECTEER_KLANTEN);
			while (resultaat.next()) 
			{
				String klantVoornaam = resultaat.getString("klantVoornaam");
				String klantAchternaam = resultaat.getString("klantAchternaam");
				String adres = resultaat.getString("adres");
				int postcode = resultaat.getInt("postcode");
				String plaats = resultaat.getString("plaats");
				boolean geslacht = resultaat.getBoolean("geslacht");
				int geboortedatum = resultaat.getInt("geboortedatum");
				String rijbewijs = resultaat.getString("rijbewijs");
				
				Klant klant = new Klant(klantVoornaam,klantAchternaam,adres,postcode,plaats,geslacht,geboortedatum,rijbewijs);
				klantenLijst.add(klant);
			}
			statement.close();
			return klantenLijst;
		} 
		catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
}
